package com.jingxuan.mapper;

import java.time.LocalDate;
import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import com.jingxuan.entity.PageVisit;
import com.jingxuan.entity.LinkClick;
import com.jingxuan.entity.DailyStats;

@Mapper
public interface VisitStatsMapper {

    // ==================== 页面访问记录 ====================

    /**
     * 插入页面访问记录
     */
    int insertPageVisit(PageVisit pageVisit);

    /**
     * 查询指定日期的UV数（独立访客数）
     */
    int countUvByDate(@Param("visitDate") LocalDate visitDate);

    /**
     * 查询指定日期的PV数（页面访问次数）
     */
    int countPvByDate(@Param("visitDate") LocalDate visitDate);

    /**
     * 查询指定日期范围的UV数（按日分组）
     */
    List<DailyStats> selectUvStatsByDateRange(@Param("startDate") LocalDate startDate,
                                              @Param("endDate") LocalDate endDate);

    // ==================== 链接跳转记录 ====================

    /**
     * 插入链接跳转记录
     */
    int insertLinkClick(LinkClick linkClick);

    /**
     * 查询指定日期的链接跳转次数
     */
    int countLinkClicksByDate(@Param("clickDate") LocalDate clickDate);

    /**
     * 查询指定日期范围的链接跳转数（按日分组）
     */
    List<DailyStats> selectLinkClickStatsByDateRange(@Param("startDate") LocalDate startDate,
                                                     @Param("endDate") LocalDate endDate);

    // ==================== 每日统计汇总 ====================

    /**
     * 插入或更新每日统计
     */
    int upsertDailyStats(DailyStats dailyStats);

    /**
     * 查询指定日期的统计数据
     */
    DailyStats selectDailyStatsByDate(@Param("statDate") LocalDate statDate);

    /**
     * 查询指定日期范围的统计数据
     */
    List<DailyStats> selectDailyStatsByDateRange(@Param("startDate") LocalDate startDate,
                                                 @Param("endDate") LocalDate endDate);

    /**
     * 更新每日UV数
     */
    int updateDailyUvCount(@Param("statDate") LocalDate statDate, @Param("uvCount") Integer uvCount);

    /**
     * 更新每日链接跳转数
     */
    int updateDailyLinkClickCount(@Param("statDate") LocalDate statDate, @Param("linkClickCount") Integer linkClickCount);

    /**
     * 增加每日链接跳转数
     */
    int incrementDailyLinkClickCount(@Param("statDate") LocalDate statDate);
}

